package com.bytebuffer;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.util.internal.PlatformDependent;

public class PooledByteBufAllocatorNormalDemo {

	public static void main(String[] args) {
		ByteBufAllocator alloc = new PooledByteBufAllocator(PlatformDependent.directBufferPreferred());

		ByteBuf byteBuf = alloc.directBuffer(254);
		// 0层		1
    	// 			1
    	// 1层		2		3	...
    	// 			2		1
    	// 2层		4		5	...
    	// 			3		2
    	// 3层		8		7	...
    	// 			4		3
    	// 4层		16		17		...
    	// 			5		4
    	// 5层		32		33		...
    	// 			6		5
    	// 6层		64		65		...
    	// 			7		6
    	// 7层		128		129		...
    	// 			8		7
    	// 8层		256		257		...
    	// 			9		8
    	// 9层		512		513		...
    	// 			10		9
    	// 10层		1024	1025	...
    	// 			11		10
    	// 11层		2048	2049	...
    	// 			12		11
	    // byteBuf:
		//		--length: 254
		//		--maxLength: 256
		// 		--memory: java.nio.DirectByteBuffer[pos=0 lim=16777216 cap=16777216]
		//			--address: 561512512
		//		--memoryAddress: 561512512
		//		--offset: 0
	    ByteBuf byteBuf2 = alloc.directBuffer(1024 * 16);
	    // 0层		1
    	// 			1
    	// 1层		2		3	...
    	// 			2		1
    	// 2层		4		5	...
    	// 			3		2
    	// 3层		8		7	...
    	// 			4		3
    	// 4层		16		17		...
    	// 			5		4
    	// 5层		32		33		...
    	// 			6		5
    	// 6层		64		65		...
    	// 			7		6
    	// 7层		128		129		...
    	// 			8		7
    	// 8层		256		257		...
    	// 			9		8
    	// 9层		512		513		...
    	// 			11		9
    	// 10层		1024	1025	...
    	// 			11		12
    	// 11层		2048	2049	...
    	// 			12		11
	    // byteBuf2:
		//		--length: 16384
		//		--maxLength: 16384
		// 		--memory: java.nio.DirectByteBuffer[pos=0 lim=16777216 cap=16777216]
		//			--address: 561512512
		//		--memoryAddress: 561528896
		//		--offset: 16384 (1024 * 16)
	    ByteBuf byteBuf3 = alloc.directBuffer(1024 * 8);
	    // 0层		1
    	// 			1
    	// 1层		2		3	...
    	// 			2		1
    	// 2层		4		5	...
    	// 			3		2
    	// 3层		8		7	...
    	// 			4		3
    	// 4层		16		17		...
    	// 			5		4
    	// 5层		32		33		...
    	// 			6		5
    	// 6层		64		65		...
    	// 			7		6
    	// 7层		128		129		...
    	// 			8		7
    	// 8层		256		257		...
    	// 			9		8
    	// 9层		512		513		...
    	// 			12		9
    	// 10层		1024	1025	...
    	// 			12		12
    	// 11层		2048	2049	...
    	// 			12		12
	    // byteBuf3:
		//		--length: 8192
		//		--maxLength: 8192
		// 		--memory: java.nio.DirectByteBuffer[pos=0 lim=16777216 cap=16777216]
		//			--address: 561512512
		//		--memoryAddress: 561520704
		//		--offset: 8192 (1024 * 8)

	    //很重要，内存释放
	    byteBuf.release();
	    byteBuf2.release();
	    byteBuf3.release();
	}

}
